import numpy as np
import matplotlib.pyplot as plt
from sklearn.discriminant_analysis import LinearDiscriminantAnalysis

# 准备数据
X = np.array([[1, 2], [2, 3], [3, 4], [4, 6], [5, 7], [6, 8]])
y = np.array([0, 0, 0, 1, 1, 1])

# 应用 LDA
lda = LinearDiscriminantAnalysis(n_components=1)
X_lda = lda.fit_transform(X, y)

# 获取 LDA 的投影向量
w = lda.coef_[0]

# 计算判别线的斜率和截距
slope = -w[0] / w[1]
intercept = 0  # 因为 LDA 投影向量的起点通常在原点

# 生成 x 轴的值
x_values = np.linspace(X[:, 0].min(), X[:, 0].max(), 100)

# 计算 y 轴的值
y_values = slope * x_values + intercept

# 可视化原始数据和转换后的数据
plt.figure(figsize=(12, 6))

# 原始数据可视化
plt.subplot(1, 2, 1)
plt.scatter(X[:, 0], X[:, 1], c=y, cmap='viridis', marker='o')
plt.title('Original Data with LDA Discriminant Line')
plt.xlabel('x1')
plt.ylabel('x2')

# 绘制 LDA 判别线
plt.plot(x_values, y_values, color='red', label='LDA Discriminant Line')
plt.legend()

# 转换后的数据可视化
plt.subplot(1, 2, 2)
plt.scatter(X_lda, [0]*len(X_lda), c=y, cmap='viridis', marker='o')
plt.title('LDA Transformed Data')
plt.xlabel('LDA Component')
plt.yticks([])

plt.tight_layout()
plt.show()